﻿using System;
using System.Collections.Generic;
using System.IO.IsolatedStorage;
using System.Xml.Serialization;

namespace Black.Minecraft.Editor.Models
{
    /// <summary>
    /// Définit un endroit ou se trouve un serveur local
    /// </summary>
    [Serializable]
    [XmlRoot(ElementName = "ServerDefinition")]
    public class ServerDefinition
    {
        #region Propriétés

        /// <summary>
        /// Obtient ou définit le chemin du serveur
        /// </summary>
        [XmlElement(typeof(string), ElementName = "Directory")]
        public string Directory
        {
            get;
            set;
        }

        /// <summary>
        /// Obtient ou définit le nom du serveur
        /// </summary>
        [XmlElement(typeof(string), ElementName = "Name")]
        public string Name
        {
            get;
            set;
        }

        #endregion

        #region Constructeurs

        /// <summary>
        /// Constructeur de la classe
        /// </summary>
        public ServerDefinition()
        {
        }

        #endregion

        #region Fonctions statiques

        /// <summary>
        /// Renvoi la liste des serveurs
        /// </summary>
        /// <returns>Liste des serveurs</returns>
        public static List<ServerDefinition> GetServerList()
        {
            List<ServerDefinition> result = new List<ServerDefinition>();

            // Ouverture de l'isolatedstorage

            using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForAssembly())
            {
                // Vérification existance fichier

                if (!store.FileExists("serverlist.xml"))
                    return (result);

                // Overture du fichier

                using (IsolatedStorageFileStream stream = store.OpenFile("serverlist.xml", System.IO.FileMode.Open))
                {
                    // Création du sérialiser

                    XmlSerializer serializer = new XmlSerializer(typeof(List<ServerDefinition>), new XmlRootAttribute("Root"));
                    result = (List<ServerDefinition>)serializer.Deserialize(stream);
                }
            }

            // On retourne la liste

            return (result);
        }

        /// <summary>
        /// Affecte la liste des serveurs
        /// </summary>
        /// <param name="list">Liste des serveurs</param>
        public static void SetServerList(List<ServerDefinition> list)
        {
            // Ouverture de l'isolatedstorage

            using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForAssembly())
            {
                // Overture du fichier

                using (IsolatedStorageFileStream stream = store.OpenFile("serverlist.xml", System.IO.FileMode.Create))
                {
                    // Création du sérialiser

                    XmlSerializer serializer = new XmlSerializer(typeof(List<ServerDefinition>), new XmlRootAttribute("Root"));
                    serializer.Serialize(stream, list);
                }
            }
        }

        #endregion
    }
}
